// 获取场景中 id 为 "开关-1" 的实体，并断言它不为 null
export const aswitch2: GameEntity = world.querySelector('#开关-2')!;

// 获取场景中 id 为 "风扇（端午节）-1" 的实体，并断言它不为 null
const fan: GameEntity = world.querySelector('#风扇（端午节）-1')!;

// 定义一个变量 canInteract，用于控制开关的互动频率，初始值为 true，表示可以互动
let canInteract: boolean = true;

// 允许实体进行互动
aswitch2.enableInteract = true;
// 设置进入实体互动范围时，提示文本的颜色为白色
aswitch2.interactColor = new GameRGBColor(1, 1, 1);
// 设置实体的互动范围为 5
aswitch2.interactRadius = 5;
//aswitch2.interactSound  // 这里缺少赋值，可以设置互动音效，例如：aswitch2.interactSound = 'audio/switch.mp3';

/**
 * 监听开关实体的互动事件
 * 当玩家与开关实体进行互动时，会触发此函数
 */
aswitch2.onInteract(async () => {
    // 检查是否可以互动
    if (canInteract) {
        // 设置为 false，防止在冷却时间内重复互动
        canInteract = false;
        // 将开关的网格体方向旋转 180 度，实现开关的切换效果
        aswitch2.meshOrientation.copy(
            aswitch2.meshOrientation.rotateY(Math.PI)
        );

        fan.position.copy(new GameVector3(142.5, 10, 116));
        while (fan.position.x < 151.5) {
            fan.position.x += 0.1;
            await sleep(20);
        }
        while (fan.position.z < 123) {
            fan.position.z += 0.1;
            await sleep(20);
        }
        while (fan.position.x < 167) {
            fan.position.x += 0.1;
            await sleep(20);
        }
        while (fan.position.z > 116.5) {
            fan.position.z -= 0.1;
            await sleep(20);
        }
        while (fan.position.x < 178) {
            fan.position.x += 0.1;
            await sleep(20);
        }
        while (fan.position.x > 167) {
            fan.position.x -= 0.1;
            await sleep(20);
        }
        while (fan.position.z < 123) {
            fan.position.z += 0.1;
            await sleep(20);
        }
        while (fan.position.x > 151.5) {
            fan.position.x -= 0.1;
            await sleep(20);
        }
        while (fan.position.z > 116.5) {
            fan.position.z -= 0.1;
            await sleep(20);
        }
        while (fan.position.x > 142.5) {
            fan.position.x -= 0.1;
            await sleep(20);
        }
        // 冷却时间结束后，重置为 true，允许再次互动
        canInteract = true;
        // 将开关的网格体方向旋转回原来的方向
        aswitch2.meshOrientation.copy(
            aswitch2.meshOrientation.rotateY(Math.PI)
        );
    }
});

// 持续粒子和吹风逻辑
setInterval(() => {
    // 1. 设置风扇自带的粒子参数（如果fan支持粒子属性）
    Object.assign(fan, {
        particleRate: 20,
        particleLimit: 100,
        particleLifetime: 3,
        particleLifetimeSpread: 0.9,
        particleColor: [
            new GameRGBColor(0, 0.4, 0.3),
            new GameRGBColor(0, 200 / 320, 128 / 255),
            new GameRGBColor(0, 200 / 320, 128 / 255),
            new GameRGBColor(0, 180 / 320, 128 / 255),
            new GameRGBColor(0, 0, 0),
        ],
        particleSize: [15, 10, 2, 1, 0.5],
        particleVelocity: new GameVector3(0, 7, 0),
        particleVelocitySpread: new GameVector3(0.5, 0.2, 0.5),
    });

    // 2. 检测风扇上方玩家并吹起
    const players = world.querySelectorAll('player');
    players.forEach((player) => {
        const pos = player.position;
        // 判断玩家是否在风扇正上方1格内，且高度低于风扇上方3格
        if (
            Math.abs(pos.x - fan.position.x) < 1 &&
            Math.abs(pos.z - fan.position.z) < 1 &&
            pos.y > fan.position.y &&
            pos.y < fan.position.y + 3.5
        ) {
            // 向上吹到3~4格高度
            player.velocity.y += 0.5; // 给一个向上的速度
            // 或直接设置位置
            // player.position.y = fan.position.y + 3.5;
        }
    });
}, 46); // 每0.046秒执行一次
